package com.dhcc.sds.util;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dhcc.core.framework.util.CommonUtil;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

/**
 * @description :调用东华语义分析接口
 * @author :zhangdc
 * @date :2022年11月3日
 * @version :1.0
 */
public class NLPUtil {

    public static Object parse(String path, String data){
        Object result = null;

        try {
            data = "data=" + URLEncoder.encode(data, "UTF-8") ;
            URL url = new URL(path);
            // 打开和url之间的连接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            PrintWriter out = null;
            // 请求方式
            conn.setRequestMethod("POST");
            //设置通用的请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
            // 设置是否向httpUrlConnection输出，设置是否从httpUrlConnection读入，此外发送post请求必须设置这两个
            // 最常用的Http请求无非是get和post，get请求可以获取静态页面，也可以把参数放在URL字串后面，传递给servlet，
            // post与get的 不同之处在于post的参数不是放在URL字串里面，而是放在http请求的正文内。
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            // 发送请求参数即数据
            out.print(data);
            // 缓冲数据
            out.flush();
            // 获取URLConnection对象对应的输入流
            InputStream is = conn.getInputStream();
            // 构造一个字符流缓存
            BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
            StringBuffer sb = new StringBuffer("");
            String str = "";
            while ((str = br.readLine()) != null) {
                sb.append(str);
            }
            // 关闭流
            is.close();
            br.close();
            out.close();
            // 断开连接，最好写上，disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。
            // 固定多线程的话，如果不disconnect，链接会增多，直到收发不出信息。写上disconnect后正常一些。
            conn.disconnect();
            //result = handleData(sb, type);
            result = sb.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;
    }

    public static Object handleData(String content, String type){
        JSONArray array = JSONArray.parseArray(content);
        StringBuffer res = new StringBuffer();
        if(CommonUtil.isNotEmpty(array)){
            //处理检查报告信息
            if(type.equals("ris")){
                for(int i = 0; i < array.size(); i++){
                    JSONObject obj = array.getJSONObject(i);
                    String objType = obj.getString("type");
                    if (objType.equals("-ris_result") || objType.equals("+ris_result")){
                        String objName = obj.getString("name");
                        res.append(objName);
                    }
                }
            }
        }
        return res.toString();
    }
}
